{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 百度AI--菜品识别"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### （1）首先需要通过API Key和Secret Key获取access_token"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>refresh_token</th>\n",
       "      <td>25.f09d3e09770fee7c2cb4002da146da95.315360000....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>expires_in</th>\n",
       "      <td>2592000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>session_key</th>\n",
       "      <td>9mzdAqFW62vRCCQA95xzreka1F0e+NYHhnLQrFYHhKR+GW...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>access_token</th>\n",
       "      <td>24.9c434e680830f02535b713e3f8c61f3d.2592000.15...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>scope</th>\n",
       "      <td>public vis-classify_dishes vis-classify_car br...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>session_secret</th>\n",
       "      <td>1f2278eb08d984315f4cddc240123420</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                                0\n",
       "refresh_token   25.f09d3e09770fee7c2cb4002da146da95.315360000....\n",
       "expires_in                                                2592000\n",
       "session_key     9mzdAqFW62vRCCQA95xzreka1F0e+NYHhnLQrFYHhKR+GW...\n",
       "access_token    24.9c434e680830f02535b713e3f8c61f3d.2592000.15...\n",
       "scope           public vis-classify_dishes vis-classify_car br...\n",
       "session_secret                   1f2278eb08d984315f4cddc240123420"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "'24.9c434e680830f02535b713e3f8c61f3d.2592000.1597995130.282335-21446128'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取access_token等参数信息\n",
    "# encoding:utf-8\n",
    "# client_id 为官网获取的AK， client_secret 为官网获取的SK\n",
    "import requests\n",
    "import base64\n",
    "import pandas as pd\n",
    "import json\n",
    "\n",
    "host = 'https://aip.baidubce.com/oauth/2.0/token?'\n",
    "params = {\n",
    "    \"grant_type\":\"client_credentials\",\n",
    "    \"client_id\":\"你的API Key\",\n",
    "    \"client_secret\":\"你的Secret Key\"\n",
    "}\n",
    "response = requests.get(host,params=params)\n",
    "display(pd.json_normalize(response.json()).T)\n",
    "\n",
    "access_token=response.json()[\"access_token\"]\n",
    "access_token"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### （2 ）接着对菜品进行识别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'log_id': 7723405680458531030, 'result_num': 5, 'result': [{'calorie': '530', 'has_calorie': True, 'name': '烤鸭', 'probability': '0.987957'}, {'calorie': '265', 'has_calorie': True, 'name': '香酥鸭', 'probability': '0.00217743'}, {'calorie': '411', 'has_calorie': True, 'name': '片皮鸭', 'probability': '0.00190568'}, {'calorie': '289', 'has_calorie': True, 'name': '烧鹅', 'probability': '0.00188485'}, {'calorie': '233', 'has_calorie': True, 'name': '啤酒鸭', 'probability': '0.00109272'}]}\n"
     ]
    }
   ],
   "source": [
    "# encoding:utf-8\n",
    "\n",
    "import requests\n",
    "import base64\n",
    "\n",
    "'''\n",
    "菜品识别\n",
    "'''\n",
    "\n",
    "request_url = \"https://aip.baidubce.com/rest/2.0/image-classify/v2/dish\"\n",
    "# 二进制方式打开图片文件\n",
    "f = open('D:/用户目录/下载/API/1.png', 'rb')\n",
    "img = base64.b64encode(f.read())\n",
    "\n",
    "params = {\"image\":img,\"top_num\":5}\n",
    "access_token = '24.6a4144bfb4fc7484c989ed89d8156b59.2592000.1597995120.282335-21446128'\n",
    "request_url = request_url + \"?access_token=\" + access_token\n",
    "headers = {'content-type': 'application/x-www-form-urlencoded'}\n",
    "response = requests.post(request_url, data=params, headers=headers)\n",
    "if response:\n",
    "    print (response.json())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 有道智云AI开放平台--图片翻译（自然语言翻译）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b'{\"orientation\":\"Up\",\"RequestId\":\"404d3c55-c9e0-46e7-80dd-cde6859f2902\",\"image_size\":[683,1024],\"lanFrom\":\"zh-CHS\",\"textAngle\":\"0.0\",\"errorCode\":\"0\",\"lanTo\":\"en\",\"exif\":\"Up\",\"resRegions\":[{\"boundingBox\":\"0,6,275,18\",\"linesCount\":1,\"lineheight\":17,\"context\":\"1\\xeb\\xaa\\xa8\\xeb\\xaa\\xa8\\xea\\xb5\\xac\\xeb\\xaa\\xa8\\xeb\\xaa\\xa8\\xeb\\xaa\\xa8\\xeb\\xaa\\xa8\\xeb\\xaa\\xa8\\xeb\\xaa\\xa8\",\"tranContent\":\"1 \\xeb\\xaa\\xa8 \\xeb\\xaa\\xa8 \\xea\\xb5\\xac \\xeb\\xaa\\xa8 \\xeb\\xaa\\xa8 \\xeb\\xaa\\xa8 \\xeb\\xaa\\xa8 \\xeb\\xaa\\xa8 \\xeb\\xaa\\xa8\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"0,28,339,30\",\"linesCount\":1,\"lineheight\":29,\"context\":\"pooeoopooosepood\",\"tranContent\":\"pooeoopooosepood\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"960,5,51,21\",\"linesCount\":1,\"lineheight\":21,\"context\":\"\\xea\\xb5\\xb0\\xeb\\x8f\\x84\",\"tranContent\":\"\\xea\\xb5\\xb0 \\xeb\\x8f\\x84\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"660,29,351,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"ooeopoospooos\",\"tranContent\":\"ooeopoospooos\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"393,70,235,75\",\"linesCount\":1,\"lineheight\":75,\"context\":\"\\xe9\\xa3\\x9f\\xe8\\xb0\\xb1\",\"tranContent\":\"The recipe\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"105,187,54,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x97\\xb6\\xe9\\x97\\xb4\",\"tranContent\":\"time\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"308,186,61,31\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x97\\xa9\\xe9\\xa4\\x90\",\"tranContent\":\"breakfast\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"553,186,52,31\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe5\\x8d\\x88\\xe9\\xa4\\x90\",\"tranContent\":\"lunch\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"104,230,64,27\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xb8\\x80\",\"tranContent\":\"Monday\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"232,229,213,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe5\\xb0\\x8f\\xe7\\xb1\\xb3\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Millet congee, steamed bread, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"545,231,63,24\",\"linesCount\":1,\"lineheight\":24,\"context\":\"\\xe8\\x87\\x8a\\xe5\\xad\\x90\\xe9\\x9d\\xa2\",\"tranContent\":\"SaoZi surface\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"105,271,63,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xba\\x8c\",\"tranContent\":\"Tuesday\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"212,272,253,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe9\\xb8\\xa1\\xe8\\x9b\\x8b\\xe3\\x80\\x81\\xe7\\x8e\\x89\\xe7\\xb1\\xb3\\xe7\\xb2\\xa5\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Eggs, hominy, steamed bread, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"556,272,40,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe7\\xb1\\xb3\\xe9\\xa5\\xad\",\"tranContent\":\"rice\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"105,316,63,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xb8\\x89\",\"tranContent\":\"Wednesday\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"232,315,213,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe5\\xa4\\xa7\\xe7\\xb1\\xb3\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8e\\xb1\",\"tranContent\":\"Rice porridge, steamed bread, steamed bread\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"548,315,60,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x89\\x8b\\xe5\\xb7\\xa5\\xe9\\x9d\\xa2\",\"tranContent\":\"Manual surface\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"104,355,72,32\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe5\\x9b\\x9b\",\"tranContent\":\"Thursday\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"232,356,213,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe5\\xb0\\x8f\\xe7\\xb1\\xb3\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe5\\x8c\\x85\\xe5\\xad\\x90\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Millet congee, steamed buns, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"556,357,49,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe7\\xb1\\xb3\\xe9\\xa5\\xad\",\"tranContent\":\"rice\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"104,399,64,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xba\\x94\",\"tranContent\":\"Friday\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"212,399,253,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe9\\xb8\\xa1\\xe8\\x9b\\x8b\\xe3\\x80\\x81\\xe7\\x8e\\x89\\xe7\\xb1\\xb3\\xe7\\xb2\\xa5\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Eggs, hominy, steamed bread, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"556,399,41,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x89\\xaf\\xe9\\x9d\\xa2\",\"tranContent\":\"Pull the surface\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"105,443,64,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe5\\x85\\xad\",\"tranContent\":\"Saturday\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"232,443,213,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe5\\xb0\\x8f\\xe7\\xb1\\xb3\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Millet congee, steamed bread, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"545,443,63,27\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe8\\x87\\x8a\\xe5\\xad\\x90\\xe9\\x9d\\xa2\",\"tranContent\":\"SaoZi surface\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"104,484,72,32\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe6\\x97\\xa5\",\"tranContent\":\"Sunday\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"232,485,212,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe5\\xb0\\x8f\\xe7\\xb1\\xb3\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8e\\xb1\",\"tranContent\":\"Millet porridge, steamed bread, small lai\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"548,485,60,27\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x89\\x8b\\xe5\\xb7\\xa5\\xe9\\x9d\\xa2\",\"tranContent\":\"Manual surface\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"788,187,52,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x99\\x9a\\xe9\\xa4\\x90\",\"tranContent\":\"dinner\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"728,229,167,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Porridge, steamed bread, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"789,273,62,27\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\xb1\\xa4\\xe9\\x9d\\xa2\\xe7\\x89\\x87\",\"tranContent\":\"Noodles in soup slice\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"792,315,40,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x8b\\x8c\\xe6\\xb1\\xa4\",\"tranContent\":\"Stir the soup\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"716,357,200,28\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe5\\xb0\\x8f\\xe7\\xb1\\xb3\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Millet congee, steamed bread, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"797,401,44,27\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe9\\x9d\\xa2\\xe7\\x89\\x87\",\"tranContent\":\"patch\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"728,443,175,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe7\\xa8\\x80\\xe9\\xa5\\xad\\xe3\\x80\\x81\\xe9\\xa6\\x92\\xe5\\xa4\\xb4\\xe3\\x80\\x81\\xe5\\xb0\\x8f\\xe8\\x8f\\x9c\",\"tranContent\":\"Porridge, steamed bread, side dishes\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"792,484,40,29\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x8b\\x8c\\xe6\\xb1\\xa4\",\"tranContent\":\"Stir the soup\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"4,647,227,31\",\"linesCount\":1,\"lineheight\":29,\"context\":\"\\xe6\\x98\\xb5\\xe5\\x9b\\xbe\\xe7\\xbd\\x91uuu.nipic.com\",\"tranContent\":\"Exchange of uuu.nipic.com\",\"dir\":\"h\",\"lang\":\"zh-CHS\"},{\"boundingBox\":\"696,652,324,22\",\"linesCount\":1,\"lineheight\":21,\"context\":\"By:No.20130822095645098303\",\"tranContent\":\"By:No.20130822095645098303\",\"dir\":\"h\",\"lang\":\"en\"}]}'\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "import uuid\n",
    "import requests\n",
    "import base64\n",
    "import hashlib\n",
    "\n",
    "from imp import reload\n",
    "\n",
    "reload(sys)\n",
    "\n",
    "YOUDAO_URL = 'https://openapi.youdao.com/ocrtransapi'\n",
    "APP_KEY = '你的KEY'\n",
    "APP_SECRET = '你的SECRET'\n",
    "\n",
    "\n",
    "def truncate(q):\n",
    "    if q is None:\n",
    "        return None\n",
    "    size = len(q)\n",
    "    return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]\n",
    "\n",
    "\n",
    "def encrypt(signStr):\n",
    "    hash_algorithm = hashlib.md5()\n",
    "    hash_algorithm.update(signStr.encode('utf-8'))\n",
    "    return hash_algorithm.hexdigest()\n",
    "\n",
    "\n",
    "def do_request(data):\n",
    "    headers = {'Content-Type': 'application/x-www-form-urlencoded'}\n",
    "    return requests.post(YOUDAO_URL, data=data, headers=headers)\n",
    "\n",
    "\n",
    "def connect():\n",
    "    f = open(r'D:/用户目录/下载/API/2.jpg', 'rb')  # 二进制方式打开图文件(添加自己的图片具体路径)\n",
    "    q = base64.b64encode(f.read()).decode('utf-8')  # 读取文件内容，转换为base64编码\n",
    "    f.close()\n",
    "\n",
    "    data = {}\n",
    "    data['from'] = 'zh-CHS'\n",
    "    data['to'] = 'en'\n",
    "    data['type'] = '1'\n",
    "    data['q'] = q\n",
    "    salt = str(uuid.uuid1())\n",
    "    signStr = APP_KEY + q + salt + APP_SECRET\n",
    "    sign = encrypt(signStr)\n",
    "    data['appKey'] = APP_KEY\n",
    "    data['salt'] = salt\n",
    "    data['sign'] = sign\n",
    "\n",
    "    response = do_request(data)\n",
    "    print(response.content)\n",
    "\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    connect()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
